From: Giovanni Campagna Date: Sat, 14 Apr 2012 13:29:54 +0000 (+0200) Subject: WindowManager: handle move-to-workspace keybindings X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~6407 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=04dbf15d9b555b0cdc50d170543be25aba2b7c4f;p=gnome-shell.git WindowManager: handle move-to-workspace keybindings Install a custom handler for move-to-workspace-* keybindings that shows the workspace switcher, which gives the user a sense of direction when navigating with the keyboard. https://bugzilla.gnome.org/show_bug.cgi?id=674104 --- diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js index 429253732..269cd4787 100644 --- a/js/ui/windowManager.js +++ b/js/ui/windowManager.js @@ -125,6 +125,14 @@ const WindowManager = new Lang.Class({ Lang.bind(this, this._showWorkspaceSwitcher)); Meta.keybindings_set_custom_handler('switch-to-workspace-down', Lang.bind(this, this._showWorkspaceSwitcher)); + Meta.keybindings_set_custom_handler('move-to-workspace-left', + Lang.bind(this, this._showWorkspaceSwitcher)); + Meta.keybindings_set_custom_handler('move-to-workspace-right', + Lang.bind(this, this._showWorkspaceSwitcher)); + Meta.keybindings_set_custom_handler('move-to-workspace-up', + Lang.bind(this, this._showWorkspaceSwitcher)); + Meta.keybindings_set_custom_handler('move-to-workspace-down', + Lang.bind(this, this._showWorkspaceSwitcher)); Meta.keybindings_set_custom_handler('switch-windows', Lang.bind(this, this._startAppSwitcher)); Meta.keybindings_set_custom_handler('switch-group', @@ -563,24 +571,40 @@ const WindowManager = new Lang.Class({ if (this._workspaceSwitcherPopup == null) this._workspaceSwitcherPopup = new WorkspaceSwitcherPopup.WorkspaceSwitcherPopup(); - if (binding.get_name() == 'switch-to-workspace-up') - this.actionMoveWorkspace(Meta.MotionDirection.UP); - else if (binding.get_name() == 'switch-to-workspace-down') - this.actionMoveWorkspace(Meta.MotionDirection.DOWN); - else if (binding.get_name() == 'switch-to-workspace-left') - this.actionMoveWorkspace(Meta.MotionDirection.LEFT); - else if (binding.get_name() == 'switch-to-workspace-right') - this.actionMoveWorkspace(Meta.MotionDirection.RIGHT); + let [action,,,direction] = binding.get_name().split('-'); + let direction = Meta.MotionDirection[direction.toUpperCase()]; + + if (action == 'switch') + this.actionMoveWorkspace(direction); + else + this.actionMoveWindow(window, direction); }, actionMoveWorkspace: function(direction) { let activeWorkspace = global.screen.get_active_workspace(); let toActivate = activeWorkspace.get_neighbor(direction); - if (toActivate && activeWorkspace != toActivate) + if (activeWorkspace != toActivate) toActivate.activate(global.get_current_time()); if (!Main.overview.visible) this._workspaceSwitcherPopup.display(direction, toActivate.index()); }, + + actionMoveWindow: function(window, direction) { + let activeWorkspace = global.screen.get_active_workspace(); + let toActivate = activeWorkspace.get_neighbor(direction); + + if (activeWorkspace != toActivate) { + // This won't have any effect for "always sticky" windows + // (like desktop windows or docks) + window.change_workspace(toActivate); + + global.display.clear_mouse_mode(); + toActivate.activate_with_focus (window, global.get_current_time()); + } + + if (!Main.overview.visible) + this._workspaceSwitcherPopup.display(direction, toActivate.index()); + }, });